// 基本用法

const fs = require('fs');
const path = require('path');

// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise

// 该例中 Promise 构造函数接受一个 函数作为参数
// 参数对应的函数的两个参数都是函数
let p = new Promise(function(resolve, reject) {

    let pathname = path.join(__dirname, 'sui-bian-xie-de.txt');
    fs.readFile(pathname, 'utf8', function(error, data) {
        if (error) {
            reject('读取失败'); // 否定
            return;
        }

        resolve('读取成功'); // 肯定
    });

});

console.log('state : ', p);

// then参数对应的函数被作为构造函数所接受参数对应函数的第一个参数
p.then(function(message) {
    console.log('then:', message);
    console.log('state : ', p);

    // catch参数对应的函数被作为构造函数所接受参数对应函数的第而个参数
}).catch(function(message) {
    console.log('catch:', message);
    console.log('state : ', p);
}).finally(function() {
    console.log('不论成功与否我都会执行');
});